﻿import types

SHMIPLE_TYPE = "shmiple_type"

class _EmptyClass:
	pass

def serialisator(obj):
	dictionary = obj.__dict__
	dictionary["shmiple_type"] = obj.__class__.__name__
	for k in dictionary.keys():
		if isinstance(dictionary[k], types.InstanceType):
			dictionary[k] = serialisator(dictionary[k])
	return dictionary

def deserialisator(dictionary, importDictionary):
	obj = _EmptyClass()
	className = dictionary.pop(SHMIPLE_TYPE)
	mod = __import__(importDictionary[className])
	
	#пара след строк некрасивый кусок - делает такую штуку, что если путь к классу составной, то фактически заменяет начало на "mod", а в конце дописывает имя класса
	eval_str_ = ["mod"] + importDictionary[className].split(".")[1:] + [className] 
	eval_str = reduce(lambda x, y: x + "." + y, eval_str_)
	
	obj.__class__ = eval(eval_str)
	obj.__dict__ = dictionary
	for k in dictionary.keys():
		if type(dictionary[k]) == dict and dictionary[k].has_key(SHMIPLE_TYPE):
			obj.__dict__[k] = deserialisator(dictionary[k], importDictionary)
	return obj
